As the software industry has matured, there is a shift in the service offerings from being devoted to developing new software systems to making modifications in evolving software systems. One of the major problems for developers in an evolutionary software development environment is that a minor change or refactoring in a source file can cause major cascaded and unintended impacts at various segments of the system, thus, leading to undesirable or incompatible changes to the code. Source-code change impact analysis deals with capturing the information on what source parts get affected when modifications are made to another part of the software.
The present technologies in this field use history of various software artifacts like version and change history to analyze and predict/guide future changes, data mining techniques to mine the sequences of changed files from the version history and generate association rule based suggestion for new refactoring, reverse engineering technique to assist refactoring or perform dynamic impact analysis using information such as test suite executions, operation profile data and so on.
The present technologies have various limitations. It requires a fairly mature and a stable software change history and repository maintenance which might not be available at the time of the analysis. Further, Reverse engineering and dynamic impact analysis techniques are version history agnostic, but, are complicated and imperceptible in terms of the transparency that they provide to the developer. For example: A reverse engineering impact analysis tool might not be helpful to guide code-refactoring to the developer as the technique operates at a different layer of abstraction. In addition to that, with the existing techniques seamless integration of the impact analysis tool is not possible as they require additional information apart from the source-code repository to estimate change impact.
In view of the foregoing discussion, there is a need for mechanism to understand how a change to one segment of the software system will impact the other segments of the software.